package game.graph;

import game.model.Juego;

import java.awt.Dimension;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.File;
import java.io.FilenameFilter;
import java.util.Arrays;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JTextField;

import biblioes.Archivos;

/**
 * Esta clase se utiliza cuando se selecciona la opcion del menu principal
 * juego nuevo. Se encarga de lanzar la ventana que le pide el nombre al usuario
 * y tiene un boton para aceptar el dato ingresado.
 *
 */

public class PideNombre extends JFrame {

	private static final long serialVersionUID = 1L;
	
	private JTextField caja;
	
	/**
	 * Constructor de la clase.
	 * 
	 */
	
	public PideNombre() {
		setTitle("Nombre jugador");
		setLayout(null);
		setVisible(true);
		setDefaultCloseOperation(JFrame.HIDE_ON_CLOSE);
		setLocation(450, 400);
		setSize(new Dimension(400,140));
		
		JLabel label = new JLabel("Ingrese su nombre");
		label.setBounds(40, 20, 200, 30);
		
		caja = new JTextField("<nombre>");
		caja.setBounds(200, 20, 130, 30);
		caja.selectAll();
		
		JButton aceptar = new JButton("Aceptar");
		aceptar.setBounds(150, 60, 100, 30);
		
		aceptar.addActionListener(new ActionListener() {

			public void actionPerformed(ActionEvent e) {
				File dir = new File("./archivos");
				File[] files = dir.listFiles(new FilenameFilter() {
					public boolean accept(File dir, String name) {
						return name.endsWith("." + "txt");
					}
				});
				
				Arrays.sort(files);
				Juego miJuego = new Juego(files); 
				miJuego.cambiaJugador(getNombre());
				miJuego.setNivelActual(0);

				try {
					Archivos.cargarArchivo(miJuego, miJuego.siguienteNivel());
					new TableroFrame(miJuego);
				} catch (IllegalArgumentException e1) {
					String mensaje = "<html>El archivo de nivel contiene" +
							  		 "<br>valores no adecuados.</html>";
					new MensajeFrame(mensaje, PideNombre.this);
				} catch (Exception e1) {
					String mensaje = "<html>No hay archivos de nivel" +
									 "<br>o su formato no es adecuado</html>";
					new MensajeFrame(mensaje, PideNombre.this);
				}
				
				setVisible(false);
			}
			
		});
		
		add(label);
		add(caja);
		add(aceptar);
	}
	
	/**
	 * Esta funcion retorna el valor ingresado en la caja de texto.
	 * Valida que no sea vacio o este comentado. En tal caso retorna 
	 * el default.
	 * 
	 * @return String contiene el nombre ingresado por el jugador.
	 */
	
	public String getNombre(){
		String nombre = null;
		nombre = caja.getText();
		if(nombre.length() == 0 || nombre.charAt(0) == '#') {
			nombre = "<nombre>";
		} if(nombre.length() > 15) {
			nombre = nombre.substring(0, 15);
		}
		return nombre;
	}
	
}
